<?php

/**
 * Clase que pone campos que se pueden pedir por ajax
 * 
 * Esta es una clase base, por lo que son las derivadas las que ponen los datos
 * de que es lo que se va a poner en cada una.
 * 
 * Esto se logra con la url "?option=autocomplete&class=%Clase%&s=%Busqueda%"
 * 
 * Lo que pasará a continuación es que se creará un objeto de la clase %Clase% y
 * se pasará el parametro "s" al metodo "SetSearch". Despues se llamará al 
 * metodo "GetAnswers", el cual regresará un arreglo con los datos necesarios.
 * Dicho arreglo se pondrá como un JSON y será regresado al navegador.
 * 
 * Si en vez de pasarse el parametro "&s=%Busqueda%" se pasa el parametro
 * "&i=%indice%", se regresará un JSON distinto, el cual tendrá todos los datos
 * de la columna en la tabla, para poder ser presentados de una manera distinta.
 * 
 * El JSON se diferenciará porque tendrá un objeto llamado "completo", el cual
 * será 1 si es un ID, o 0 si es una busqueda normal.
 * 
 * 
 * 
 * Si se pasa el parametro "&d=1", se tomará como que se necesita debuguear, y,
 * ademas de regresar el JSON, se guardará la info del query en un archivo de
 * texto.
 */
class Autocomplete {
  /**
   * Tabla en la que se buscaran los elementos
   * 
   * @var string
   */
  var $strTabla    ;
  
  /**
   * Nombre del indice en la tabla
   * 
   * @var string
   */
  var $strIndice   ;
  
  /**
   * Nombre del campo en el que se realizará la busqueda. Puede ser un concat
   * y la busquedá estará dada por un LIKE, con "%" al principio y al final.
   * Este campo será el que se pondrá para mostrar los datos
   * 
   * @var string
   */
  var $strDesc     ;
  
  /**
   * Arreglo con los datos totales de la tabla. Es de la forma:
   * $arrDatosComp["indice"]["campo"] = "valor";
   * 
   * Generalmente viene vacio, pero si viene lleno, no se hará una consulta, y
   * se buscarán los datos en este arreglo
   * 
   * @var array
   */
  var $arrDatosComp;
  
  /**
   * Cadena a buscar
   * 
   * @var string
   */
  var $__strCadenaBusqueda;
  
  /**
   * Indice que será regresado
   * 
   * @var int
   */
  var $__intIndiceRegresar;
  
  /**
   * Indica si se debe guardar la información en el archivo de logs
   * 
   * @var boolean
   */
  var $__bolEsDebug       ;
  
  /**
   * Arreglo con los resultados. Viene de la forma:
   * $arrDatosComp["indice"]["campo"] = "valor";
   * 
   * @var array
   */
  var $arrRes;
  
  function AutoComplete() {
    
  }
  
  function Inicializar($strTabla = "", $strIndice = "", $strDesc = "") {
    $this->strTabla  = $strTabla ;
    $this->strIndice = $strIndice;
    $this->strDesc   = $strDesc  ;
  }
  
  function SetSearch() {
    $this->__strCadenaBusqueda = Variables::GetOption('s');
    $this->__bolEsDebug        = Variables::GetOption('d') - 0;
    $this->__intIndiceRegresar = Variables::GetOption('i');
  }
  
  function GetAnswers() {
    $strConsulta = "NONE";
    if($this->__intIndiceRegresar) {
      // Se necesita regresar solo un elemento
      if($this->arrDatosComp) {
        $this->arrRes[$this->__intIndiceRegresar] = $this->arrDatosComp[$this->__intIndiceRegresar];
        $this->__Loguear("Regresando valor del arreglo con indice {$this->__intIndiceRegresar}");
      } else {
        $strConsulta = "SELECT * FROM {$this->strTabla} WHERE {$this->strIndice} = '{$this->__intIndiceRegresar}'";
        $this->__Loguear("Consulta: $strConsulta");
      }
    } else {
      if($this->arrDatosComp) {
        $this->arrRes[$this->__intIndiceRegresar] = $this->arrDatosComp[$this->__intIndiceRegresar];
        $this->__Loguear("Regresando valor del arreglo con indice {$this->__intIndiceRegresar}");
      } else {
        $strConsulta = "SELECT * FROM {$this->strTabla} WHERE {$this->strIndice} = '{$this->__intIndiceRegresar}'";
        $this->__Loguear("Consulta: $strConsulta");
      }
    }
  }
  
  function __Loguear($strCadenaLog) {
    if($this->__bolEsDebug) {
      $rsHandle = fopen("autocomplete.log.txt", "a+");
      fprintf($rsHandle, "%s\n", $strCadenaLog);
      fclose($rsHandle);
    }
  }
}

?>
